#include <iostream>
#include <sys/eventfd.h>
#include <unistd.h>

int main()
{
    //创建描述符,用于事件通知
    //创建一个eventfd对象实现事件通知
    //int eventfd(unsigned int initval, int flags);
    //initval:计数初始值
    //EFD_CLOEXEC禁止进程复制这个eventfd
    //EFD_NONBLOCK开启非阻塞
    //返回文件描述符,用于操作->通过read,write,close进行操作
    //eventfd进行IO读取,写入的时候,必须是8字节数据
    int efd = eventfd(0,EFD_CLOEXEC|EFD_NONBLOCK);//eventfd - create a file descriptor for event notification
    if(efd<0)
    {
        perror("eventfd error!");
        return -1;
    }
    uint64_t val = 1;
    //用于表示事件通知的次数
    write(efd,&val,sizeof(val));
    write(efd,&val,sizeof(val));
    write(efd,&val,sizeof(val));
    uint64_t res = 0;
    //读取的数据就是通知的次数,读取之后,计数清零
    read(efd,&res,sizeof(res));
    std::cout<<res<<std::endl;
    uint64_t ret =0;
    read(efd,&ret,sizeof(ret));
    std::cout<<ret<<std::endl;
    close(efd);
    return 0;
}